﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Capa_Negocio_Facade;
using Capa_Negocio_Interface;
using Capa_Entidad;
using DevExpress.Web.ASPxEditors;

public partial class Clinica_wfAtencionDiagnostico : System.Web.UI.Page
{
    IFacadeRegistrarDiagnostico facadeDiagnostico = null;
    private static List<TMPDIAGNOSTICO> listDiagnostico = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack == false)
        {
            if (Session["Ate_Operacion"] == null)
            {
                Response.Redirect("wfAtencionListado.aspx");
                return;
            }
            listDiagnostico = new List<TMPDIAGNOSTICO>();
            this.ListaCapitulo();      

        }
    }





    private void ListaCapitulo()
    {
        facadeDiagnostico = new FacadeRegistrarDiagnostico();
        try
        {
            cboCapitulo.DataSource = facadeDiagnostico.listaCapitulo();
            cboCapitulo.ValueField = "DIC_ID_DIAGNOSTICO_CAPITULO";
            cboCapitulo.TextField = "DIC_DESCRIPCION";
            cboCapitulo.DataBind();
            ListEditItem l = new ListEditItem() { Text = "Seleccione", Value = "" };
            cboCapitulo.Items.Insert(0, l);
            cboCapitulo.SelectedIndex = 0;             

        }
        catch (Exception ex)
        {
            lblMensaje.Text = "ERROR: " + ex.Message;
            pcMensaje.ShowOnPageLoad = true;
        }

    }


    private void ListaGrupo()
    {
        facadeDiagnostico = new FacadeRegistrarDiagnostico();
        try
        {
            List<GEN_DIAGNOSTICO_GRUPO>list = new List<GEN_DIAGNOSTICO_GRUPO>();
            list = facadeDiagnostico.listaGrupo(Convert.ToInt32(cboCapitulo.Value));

            cboGrupo.DataSource = list;
            cboGrupo.TextField = "DIG_DESCRIPCION";
            cboGrupo.ValueField = "DIG_ID_DIAGNOSTICO_GRUPO";
            cboGrupo.DataBind();

            if (list.Count() == 0) {
                lblMensaje.Text = "No hay grupos asociados a capitulo seleccionado";
                pcMensaje.ShowOnPageLoad = true;
                return;
            }

        }
        catch (Exception ex)
        {

            lblMensaje.Text = "ERROR: " + ex.Message;
            pcMensaje.ShowOnPageLoad = true;
        }
    }

    private void ListaCategoria()
    {

        facadeDiagnostico = new FacadeRegistrarDiagnostico();
        try
        {

            List<GEN_DIAGNOSTICO_CATEGORIA> list = new List<GEN_DIAGNOSTICO_CATEGORIA>();
            list = facadeDiagnostico.listaCategoria(Convert.ToInt32(cboGrupo.Value));
            cboCategoria.DataSource = list;
            cboCategoria.TextField = "DICA_DESCRIPCION";
            cboCategoria.ValueField = "DICA_ID_DIAGNOSTICO_CATEGORIA";
            cboCategoria.DataBind();

            if (list.Count() == 0) {

                lblMensaje.Text = "No hay categoria asociados a grupo seleccionado: ";
                pcMensaje.ShowOnPageLoad = true;
                return;
            }

        }
        catch (Exception)
        {

            throw;
        }
    }
    
    private struct TMPDIAGNOSTICO
    {
        public int DIA_ID_DIAGNOSTICO { get; set; }
        public string DIA_DESCRIPCION { get; set; }
        public string DIA_CODIGO_CIE10 { get; set; }
        public int DICA_ID_DIAGNOSTICO_CATEGORIA { get; set; }
        public bool DIA_GESTACION { get; set; }
        public bool DIA_MORBILIDAD { get; set; }
        public bool DIA_INTRAHOSPITALARIO { get; set; }
        public bool DIA_RESTRICCION { get; set; }
        public string DES_CATEGORIA { get; set; }
        public string DES_GRUPO { get; set; }
        public string DES_CAPITULO { get; set; }
    }
    
    private void Agregar() {
        try
        {
            TMPDIAGNOSTICO t = new TMPDIAGNOSTICO();
            t.DIA_ID_DIAGNOSTICO = 0;
            t.DIA_DESCRIPCION = txtDescripcion.Text;
            t.DIA_CODIGO_CIE10 = txtCodigo.Text.Trim();
            t.DIA_GESTACION = false;
            t.DIA_MORBILIDAD = false;
            t.DIA_INTRAHOSPITALARIO = false;
            t.DIA_RESTRICCION = false;
            if (rbtTipo.SelectedItem.Value == "Gestación")
            {
                t.DIA_GESTACION = true;
            }
            else if (rbtTipo.SelectedItem.Value == "Morbilidad")
            {

                t.DIA_MORBILIDAD = true;
            }
            else if (rbtTipo.SelectedItem.Value == "Intrahospitalario")
            {
                t.DIA_INTRAHOSPITALARIO = true;
            }
            else if (rbtTipo.SelectedItem.Value == "Restricción")
            {
                t.DIA_RESTRICCION = true;
            }
            t.DICA_ID_DIAGNOSTICO_CATEGORIA = Convert.ToInt32(cboCategoria.Value);

            t.DES_CAPITULO = cboCapitulo.Text;
            t.DES_CATEGORIA = cboCategoria.Text;
            t.DES_GRUPO = cboGrupo.Text;
            listDiagnostico.Add(t);
            grdListaDiagnostico.DataSource = listDiagnostico;
            grdListaDiagnostico.DataBind();



            this.LimpiarControlesAgregar();
        }
        catch (Exception ex)
        {

            lblMensaje.Text = "ERROR: " + ex.Message;
            pcMensaje.ShowOnPageLoad = true;
        }
       
    }
    IFacadeRegistrarAtencion facadeAtencion;
    private void Grabar() {
        try
        {
            int contador = 0;
            facadeDiagnostico = new FacadeRegistrarDiagnostico();
            foreach (TMPDIAGNOSTICO item in listDiagnostico)
            {
                facadeAtencion=new FacadeRegistrarAtencion();
                GEN_DIAGNOSTICO d = new GEN_DIAGNOSTICO();
                int IdGen = facadeDiagnostico.UltimoNumeroDiagnostico() + 1;
                d.DIA_ID_DIAGNOSTICO = IdGen;
                d.DIA_DESCRIPCION = item.DIA_DESCRIPCION;
                d.DIA_CODIGO_CIE10 = item.DIA_CODIGO_CIE10.Trim();
                d.DIA_GESTACION = item.DIA_GESTACION;
                d.DIA_MORBILIDAD = item.DIA_MORBILIDAD;
                d.DIA_INTRAHOSPITALARIO = item.DIA_INTRAHOSPITALARIO;
                d.DIA_RESTRICCION = item.DIA_RESTRICCION;
                d.DICA_ID_DIAGNOSTICO_CATEGORIA = item.DICA_ID_DIAGNOSTICO_CATEGORIA;
                facadeDiagnostico.InsertarDiagnostico(d);

                ATE_ATENCION_DIAGNOSTICO ad = new ATE_ATENCION_DIAGNOSTICO();
                int IdDiagnostico = facadeAtencion.ObtenerIdUltimoAtencionDiagnostico();
                ad.ATD_ID_DIAGNOSTICO = IdDiagnostico;
                ad.ATE_ID_ATENCION = (int)Session["IdAtencion"];
                ad.SUB_ID_SUBCLASIFICACION = 1000;
                ad.DIA_ID_DIAGNOSTICO = IdGen;

                facadeAtencion.InsertarAtencionDiagnostico(ad);

                contador += 1;
            }
            if (Session["IdCita"].ToString() != "")
            {
                facadeAtencion.ActualizarEstadoCita(Convert.ToInt16(Session["IdCita"].ToString()), 3);
            }

            if (contador == listDiagnostico.Count())
            {

                lblMensaje.Text = "Se grabó correctamente";
                pcMensaje.ShowOnPageLoad = true;
            }
            else {
                lblMensaje.Text = "Se grabó parcialmente";
                pcMensaje.ShowOnPageLoad = true;            
            };

            this.LimpiarControlesGrabar();
        }
        catch (Exception ex)
        {
            lblMensaje.Text = "ERROR: " + ex.Message;
            pcMensaje.ShowOnPageLoad = true;
        }       
    }


    private void LimpiarControlesGrabar() {
        txtDescripcion.Text = string.Empty;
        txtCodigo.Text = string.Empty;
        cboCapitulo.Value = string.Empty;
        cboCategoria.Value = string.Empty;
        cboGrupo.Value = string.Empty;
        grdListaDiagnostico.DataSource = null;
        listDiagnostico = null;
        rbtTipo.SelectedItem = null;
    }

    private void LimpiarControlesAgregar() {

        txtDescripcion.Text = string.Empty;
        txtCodigo.Text = string.Empty;
        cboCapitulo.Value =string.Empty;
        cboCategoria.Value = string.Empty;
        cboGrupo.Value = string.Empty;
        rbtTipo.SelectedItem = null;
    }



    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        this.Agregar();

    }
    protected void btnAceptar_Click(object sender, EventArgs e)
    {
        if (Session["Ate_Operacion"].ToString() == "P")
        {
            return;
        }
        this.Grabar();
    }
    protected void cboCapitulo_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.ListaGrupo();
        txtCodigo.Text = "";
    }
    protected void cboGrupo_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.ListaCategoria();
        txtCodigo.Text = "";
    }
    protected void grdListaDiagnostico_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        grdListaDiagnostico.DataSource = listDiagnostico;
        grdListaDiagnostico.DataBind();
    }
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("wfAtencion.aspx");
    }
    protected void cboCategoria_SelectedIndexChanged(object sender, EventArgs e)
    {
        facadeDiagnostico=new FacadeRegistrarDiagnostico();
        List<GEN_DIAGNOSTICO_CAPITULO> list = new List<GEN_DIAGNOSTICO_CAPITULO>();
        list = facadeDiagnostico.listaCapituloCodigo(Convert.ToInt32(cboCapitulo.Value));
        string codcap = list[0].DIC_CODIGO;


        List<GEN_DIAGNOSTICO_GRUPO> listgrupo = new List<GEN_DIAGNOSTICO_GRUPO>();
        listgrupo = facadeDiagnostico.listagrupoxid(Convert.ToInt32(cboGrupo.Value));
        string codcapgrupo = listgrupo[0].DIG_CODIGO;

        List<GEN_DIAGNOSTICO_CATEGORIA> listarcat = new List<GEN_DIAGNOSTICO_CATEGORIA>();
        listarcat = facadeDiagnostico.listaCategxId(Convert.ToInt32(cboCategoria.Value));
        string codcat = listarcat[0].DICA_CODIGO;
        txtCodigo.Text = codcat.ToString();
    }
}